#!/bin/bash

# 脚本：rfmAiGetRelatedFiles.sh
# 功能：获取rfmAI对话记录及其相关附件文件
# 用法：rfmAiGetRelatedFiles.sh <rfmAI文件> [相关消息查找脚本]

set -e

# 显示使用说明
show_usage() {
    echo "用法: $0 <rfmAI文件> [相关消息查找脚本]"
    echo "功能: 获取rfmAI对话记录及其相关附件文件"
    echo "示例:"
    echo " $0 conversation.rfmAI.md"
    echo " $0 conversation.rfmAI.md rfmAiFindRelatedMessages_Direct.sh"
    echo " $0 conversation.rfmAI.md rfmAiFindRelatedMessages.sh"
    exit 1
}

# 检查参数
if [ "$#" -lt 1 ] || [ "$#" -gt 2 ]; then
    echo "错误: 需要1-2个参数" >&2
    show_usage
fi

INPUT_FILE="$1"
RELATED_SCRIPT="$2"

# 验证输入文件格式
case "$INPUT_FILE" in
    *.rfmAI.md) ;;
    *) 
        echo "错误: 输入必须是 .rfmAI.md 文件" >&2
        show_usage
        ;;
esac

# 检查输入文件是否存在
if [ ! -f "$INPUT_FILE" ]; then
    echo "错误: 文件不存在: $INPUT_FILE" >&2
    exit 2
fi

# 检查依赖命令是否存在
if ! command -v extractContentFromMarkdownRecursive &> /dev/null; then
    echo "错误: 找不到 extractContentFromMarkdownRecursive 命令" >&2
    exit 3
fi

echo "=== 开始处理: $INPUT_FILE ===" >&2

# 使用关联数组来存储文件（自动去重）
declare -A file_set

# 添加文件到集合的函数
add_to_file_set() {
    local files="$1"
    while IFS= read -r file; do
        if [ -n "$file" ]; then
            file_set["$file"]=1
        fi
    done <<< "$files"
}

if [ -n "$RELATED_SCRIPT" ]; then
    # 情况1: 提供了相关消息查找脚本
    echo "使用相关消息查找脚本: $RELATED_SCRIPT" >&2
    
    # 检查相关脚本是否存在且可执行
    if [ ! -f "$RELATED_SCRIPT" ] || [ ! -x "$RELATED_SCRIPT" ]; then
        echo "错误: 相关脚本不存在或不可执行: $RELATED_SCRIPT" >&2
        exit 4
    fi
    
    echo "步骤1: 运行相关消息查找脚本..." >&2
    # 运行相关脚本获取对话记录文件列表
    if ! related_messages=$("$RELATED_SCRIPT" "$INPUT_FILE" 2>/dev/null); then
        echo "错误: 运行相关脚本失败: $RELATED_SCRIPT" >&2
        exit 5
    fi
    
    # 将相关消息文件添加到集合
    add_to_file_set "$related_messages"
    
    echo "步骤2: 从相关消息中提取附加文件..." >&2
    # 从每个相关消息文件中提取附加文件
    while IFS= read -r message_file; do
        if [ -n "$message_file" ] && [ -f "$message_file" ]; then
            echo "处理文件: $message_file" >&2
            
            # 提取附加文件内容
            attachments=$(extractContentFromMarkdownRecursive 0 "$message_file" "附加文件" 2>/dev/null || echo "")
            
            if [ -n "$attachments" ]; then
                # 将附加文件添加到集合
                add_to_file_set "$attachments"
                echo " - 找到附加文件" >&2
            else
                echo " - 无附加文件" >&2
            fi
        fi
    done <<< "$related_messages"
    
else
    # 情况2: 没有提供相关消息查找脚本
    echo "未提供相关消息查找脚本，仅处理当前文件" >&2
    
    # 将输入文件添加到集合
    file_set["$INPUT_FILE"]=1
    
    echo "步骤1: 从当前文件中提取附加文件..." >&2
    # 从输入文件中提取附加文件
    attachments=$(extractContentFromMarkdownRecursive 0 "$INPUT_FILE" "附加文件" 2>/dev/null || echo "")
    
    if [ -n "$attachments" ]; then
        # 将附加文件添加到集合
        add_to_file_set "$attachments"
        echo "找到附加文件" >&2
    else
        echo "无附加文件" >&2
    fi
fi

echo "步骤3: 排序并输出结果..." >&2
# 从关联数组中提取键（文件名），排序并输出
for file in "${!file_set[@]}"; do
    echo "$file"
done | sort

echo "=== 处理完成 ===" >&2
